package com.quanyan.place.mapper;

import com.quanyan.orderpay.request.ReqPayInfo;
import com.quanyan.place.entity.PlaceOrderSalePlan;
import com.quanyan.place.entity.TbBizPlaceOrderItem;
import com.quanyan.place.entity.TbBizPlaceUnitSalePlan;
import com.quanyan.place.entity.apireq.ReqPlaceOrderInfo;
import com.quanyan.place.entity.apireq.ReqPlaceOrderSearchVo;
import com.quanyan.place.entity.apireq.ReqRevenueVo;
import com.quanyan.place.entity.apiresp.*;
import com.quanyan.place.entity.vo.PlaceOrderPayInfoVo;
import com.quanyan.place.entity.vo.PlaceUnitSaleGroupVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public interface TbBizPlaceOrderManagerMapper {

    List<PlaceOrderSalePlan> queryShoppingCartOrderStatus(@Param("map")Map<String,Object> map);

    List<PlaceOrderSalePlan> queryBookAllOrderStatus(@Param("map")Map<String,Object> map);

    /**
     *根据日期以及当前时间查新已经完成支付的订单，预定的销售计划结束时间小于当前查询的系统时间
     * @param map
     * @return
     */
    List<PlaceOrderSalePlan> selectPayStatusOrderId(@Param("map")Map<String,Object> map);

    /**
     * 查询根据用户id以及订单号查询订单状态，按照销售计划的起始时间排序
     * @param map
     * @return
     */
    List<PlaceOrderSalePlan> selectOrderStatus(@Param("map")Map<String,Object> map);

    /**
     * 后台订单支付方式查询
     * @param reqPlaceOrderSearchVo
     * @return
     */
    List<PlaceOrderPayInfoVo> selectPlaceOrderPayInfo(@Param("reqPlaceOrderSearchVo") ReqPlaceOrderSearchVo reqPlaceOrderSearchVo);

    /**
     * 后台订单支付方式总记录数
     * @param reqPlaceOrderSearchVo
     * @return
     */
    Integer placeOrderPayInfoCount(@Param("reqPlaceOrderSearchVo") ReqPlaceOrderSearchVo reqPlaceOrderSearchVo);

    /**
     * 查询用户当前场馆每天订阅总的销售计划小时数
     * @param map
     * @return
     */
    Integer countUserPayOrderAllTimeByDay(@Param("map")Map<String,Object> map);

    /**
     * 查询销售计划总的小时数
     * @param reqPlaceOrderInfo
     * @return
     */
    Integer countSalePlanHours(@Param("reqPlaceOrderInfo")ReqPlaceOrderInfo reqPlaceOrderInfo);

    /**
     * 场地使用率统计 空闲小时数 和 非空闲小时数
     * @param reqRevenueVo
     * @return
     */
    Integer placeUnitFreeTimeAndOccupyTimeStatistics(@Param("reqRevenueVo")ReqRevenueVo reqRevenueVo);

    /**
     * 订单管理列表
     * @param reqPlaceOrderSearchVo
     * @return
     */
    List<RespPlaceOrderMessage> getPlaceOrderMessageList(@Param("reqPlaceOrderSearchVo")ReqPlaceOrderSearchVo reqPlaceOrderSearchVo);

    /**
     * 订单管理记录数
     * @param reqPlaceOrderSearchVo
     * @return
     */
    Integer getPlaceOrderMessageCount(@Param("reqPlaceOrderSearchVo")ReqPlaceOrderSearchVo reqPlaceOrderSearchVo);


    /**
     * 获取用户订场小时数
     * @param map
     * @return
     */
    Double getUserPlaceHours(@Param("map")Map<String,Object> map);

    /**
     *根据日期以及当前时间查新已经完成支付的门票订单，预定的销售计划结束时间小于当前查询的系统时间
     * @param map
     * @return
     */
    List<PlaceOrderSalePlan> selectTicketOrderStatus(@Param("map")Map<String,Object> map);


    /**
     * 销售计划是否售罄
     * @param map
     * @return
     */
    List<PlaceUnitSaleGroupVo> getSalePlanOut(@Param("map")Map<String,Object> map);


    /** 营收统计
     * 线下订单和线上订单数量
     * @param reqRevenueVo
     * @return
     */
    List<RespRevenueVo> selectOrderCount(@Param("reqRevenueVo") ReqRevenueVo reqRevenueVo);

    /** 营收统计
     * 线下订单总额和线下订单总额
     * @param reqRevenueVo
     * @return
     */
    List<RespRevenueVo> selectOrderAmount(@Param("reqRevenueVo") ReqRevenueVo reqRevenueVo);

    /**
     * 不同支付方式订单金额
     * @param reqRevenueVo
     * @return
     */
    List<RespRevenueVo> selectOrderAmountByPayType(@Param("reqRevenueVo") ReqRevenueVo reqRevenueVo);

    /**
     * 获取场地销售明细
     * @param map
     * @return
     */
    List<RespPlaceUnitSaleDetail> getUnitSaleDetail(@Param("map")Map<String,Object> map);

    /**
     * 场地销售明细(导出)
     * @param map
     * @return
     */
    List<RespPlaceUnitSaleDetail> getUnitSaleDetailExport(@Param("map")Map<String,Object> map);

    /**
     * 获取门票销售明细
     * @param map
     * @return
     */
    List<RespPlaceTicketDetail> getTicketDetail(@Param("map")Map<String,Object> map);

    /**
     * 获取门票销售明细(导出)
     * @param map
     * @return
     */
    List<RespPlaceTicketDetail> getTicketDetailExport(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售明细
     * @param map
     * @return
     */
    List<RespPlaceGoodsDetail> getGoodsDetail(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售明细(导出)
     * @param map
     * @return
     */
    List<RespPlaceGoodsDetail> getGoodsDetailExport(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售明细 (个数)
     * @param map
     * @return
     */
    Integer countGetUnitSaleDetail(@Param("map")Map<String,Object> map);


    /**
     * 根据订单号查询订单总金额
     * @param map
     * @return
     */
    BigDecimal orderTotalsPrices(@Param("map")Map<String,Object> map);

    /**
     * 兼容老版本查询订单总额
     * @param map
     * @return
     */
    BigDecimal oldOrderTotalsPrices(@Param("map")Map<String,Object> map);

    /**
     * 获取门票销售明细（个数）
     * @param map
     * @return
     */
    Integer countGetTicketDetail(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售明细（个数）
     * @param map
     * @return
     */
    Integer countGetGoodsDetail(@Param("map")Map<String,Object> map);

    /**
     * client 订单详情订单金额
     * @param map
     * @return
     */
    BigDecimal clientOrderTotalsPrices(@Param("map")Map<String,Object> map);

    /**
     * 场地销售明细实付金额合计
     * @param map
     * @return
     */
    BigDecimal getUnitSaleDetailAmountSum(@Param("map")Map<String,Object> map);

    /**
     * 场地销售明细消费时长合计
     * @param map
     * @return
     */
    Double getUnitSaleDetailTimeSum(@Param("map")Map<String,Object> map);

    /**
     * 商品销售明细商品数量合计
     * @param map
     * @return
     */
    Integer getGoodsDetailCountSum(@Param("map")Map<String, Object> map);

    /**
     *商品销售明细实付金额合计
     * @param map
     * @return
     */
    BigDecimal getGoodsDetailAmountSum(@Param("map")Map<String, Object> map);

    /**
     *商品销售明细总成本合计
     * @param map
     * @return
     */
    BigDecimal getGoodsDetailCostSum(@Param("map")Map<String, Object> map);

    /**
     *门票销售明细实付金额合计
     * @param map
     * @return
     */
    Integer getTicketDetailCountSum(@Param("map")Map<String, Object> map);

    /**
     *门票销售明细实付金额合计
     * @param map
     * @return
     */
    BigDecimal getTicketDetailAmountSum(@Param("map")Map<String, Object> map);

    /**
     * 获取场地销售统计   --场地编号
     * @param map
     * @return
     */
    List<RespUnitSaleStatisticsPlaceCode> getUnitSaleStatisticsByPlaceCode(@Param("map")Map<String,Object> map);

    /**
     * 获取场地销售统计   --场地编号(个数)
     * @param map
     * @return
     */
    Integer countGetUnitSaleStatisticsByPlaceCode(@Param("map")Map<String,Object> map);

    /**
     * 获取场地销售统计   --销售渠道
     * @param map
     * @return
     */
    List<RespUnitSaleStatisticsOrderChannel> getUnitSaleStatisticsByOrderChannel(@Param("map")Map<String,Object> map);

    /**
     * 获取场地销售统计   --运动类型
     * @param map
     * @return
     */
    List<RespUnitSaleStatisticsCategory> getUnitSaleStatisticsByCategory(@Param("map")Map<String,Object> map);

    /**
     * 获取场地销售统计   --散客会员
     * @param map
     * @return
     */
    List<RespUnitSaleStatisticsMember> getUnitSaleStatisticsByMember(@Param("map")Map<String,Object> map);

    /**
     * 门票销售统计  --按门票编号
     * @param map
     * @return
     */
    List<RespTicketStatisticsTicketCode> getTicketStatisticsByTicketCode(@Param("map")Map<String, Object> map);

    /**
     * 门票销售统计  --按门票编号(个数)
     * @param map
     * @return
     */
    Integer countGetTicketStatisticsByTicketCode(@Param("map")Map<String,Object> map);

    /**
     * 门票销售统计  --按销售渠道
     * @param map
     * @return
     */
    List<RespTicketStatisticsOrderChannel> getTicketStatisticsByOrderChannel(@Param("map")Map<String, Object> map);

    /**
     * 门票销售统计  --按运动类型
     * @param map
     * @return
     */
    List<RespTicketStatisticsCategory> getTicketStatisticsByCategory(@Param("map")Map<String, Object> map);

    /**
     * 门票销售统计  --按散客会员
     * @param map
     * @return
     */
    List<RespTicketStatisticsMember> getTicketStatisticsByMember(@Param("map")Map<String, Object> map);

    /**
     * 获取商品销售统计   --按商品编号
     * @param map
     * @return
     */
    List<RespGoodsStatisticsGoodsId> getGoodsStatisticsByGoodsId(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按商品编号(个数)
     * @param map
     * @return
     */
    Integer countGetGoodsStatisticsByGoodsId(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按一级目录
     * @param map
     * @return
     */
    List<RespGoodsStatisticsOneLevel> getGoodsStatisticsByOneLevel(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按一级目录(个数)
     * @param map
     * @return
     */
    Integer countGetGoodsStatisticsByOneLevel(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按二级目录
     * @param map
     * @return
     */
    List<RespGoodsStatisticsTwoLevel> getGoodsStatisticsByTwoLevel(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按二级目录(个数)
     * @param map
     * @return
     */
    Integer countGetGoodsStatisticsByTwoLevel(@Param("map")Map<String,Object> map);

    /**
     * 获取商品销售统计   --按散客会员
     * @param map
     * @return
     */
    List<RespGoodsStatisticsMember> getGoodsStatisticsByMember(@Param("map")Map<String,Object> map);

    /** 查询订单支付明细支付方式分组 **/
    List<Integer> selectPayTypeGroupByPayType(@Param("placeOrderId")String placeOrderId);

    /**app端 再次支付**/
    List<ReqPayInfo> selectPayTypeGroupByPayTypeAndOrderId(@Param("placeOrderId")String placeOrderId);

    /** 查询订支付方式 【字典表】 **/
    List<String> selectPayTypeByPayIds(@Param("map")Map<String,Object> map);
}